package com.smile.mybatis;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardOpenOption;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class RemoveDuplicateImports {

    public static void main(String[] args) {
        // 指定要扫描的文件夹路径
        String folderPath = "D:\\cfdp_java\\cpw-cfdp\\src\\main\\java\\com\\visense\\smart\\pharm\\cfdp\\domain\\cpw";

        try {
            processFolderForDuplicateImports(folderPath);
            System.out.println("重复导入清理完成！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 处理文件夹中的所有Java文件，移除重复导入
     * @param folderPath 文件夹路径
     * @throws IOException IO异常
     */
    public static void processFolderForDuplicateImports(String folderPath) throws IOException {
        Path startPath = Paths.get(folderPath);

        Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                if (file.toString().endsWith(".java")) {
                    removeDuplicateImports(file);
                }
                return FileVisitResult.CONTINUE;
            }
        });
    }

    /**
     * 移除单个Java文件中的重复导入语句
     * @param filePath 文件路径
     * @throws IOException IO异常
     */
    public static void removeDuplicateImports(Path filePath) throws IOException {
        // 读取文件内容
        List<String> lines = Files.readAllLines(filePath);
        List<String> newLines = new ArrayList<>();

        // 用于跟踪已添加的导入语句
        Set<String> importedStatements = new LinkedHashSet<>();
        boolean inImportSection = false;
        boolean modified = false;

        for (String line : lines) {
            String trimmedLine = line.trim();

            // 检查是否是导入语句
            if (trimmedLine.startsWith("import ")) {
                inImportSection = true;
                // 如果这是新的导入语句，则添加
                if (importedStatements.add(trimmedLine)) {
                    newLines.add(line);
                } else {
                    // 发现重复导入，标记为已修改
                    modified = true;
                }
            } else {
                // 结束导入部分
                if (inImportSection && !trimmedLine.isEmpty() && !trimmedLine.startsWith("import ")) {
                    inImportSection = false;
                }
                newLines.add(line);
            }
        }

        // 如果文件被修改，则写回文件
        if (modified) {
            Files.write(filePath, newLines, StandardOpenOption.TRUNCATE_EXISTING);
            System.out.println("已清理重复导入: " + filePath);
        }
    }
}
